package com.dylan.历史.多线程.并发编程的艺术.原子操作;

import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;

/**
 * Created by Dylan on 2018/9/20.
 */
public class 基本类型 {

    public static void main(String[] args) {
        AtomicInteger atomicInteger = new AtomicInteger(10);
        AtomicLong atomicLong = new AtomicLong(10);
        AtomicBoolean atomicBoolean = new AtomicBoolean(true);

        // 原子方式自增
        atomicInteger.incrementAndGet();
        atomicLong.incrementAndGet();

        // 原子方式相加
        atomicInteger.addAndGet(10);
        atomicLong.addAndGet(10);

        // 原子方式更新数据
        atomicInteger.compareAndSet(21, 31);
        atomicLong.compareAndSet(21, 31);
        atomicInteger.updateAndGet(i -> i * 2);
        atomicLong.updateAndGet(i -> i * 2);

        // 原子方式更新，内部是用0,1实现的
        atomicBoolean.compareAndSet(true, false);
    }
}
